#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
    printf("main进程(%d)开始执行\n", getpid());

    pid_t pid = fork();
    // printf("fork之后\n");

    if (pid == 0) // 子进程
    {
        printf("子进程(%d)开始执行\n", getpid());
        // 通过execve()来执行新的程序（other）
        char *path = "/bin/ping";
        char *argv[] = {path, "-c", "5", "www.baidu.com", NULL}; // argv[0]为程序名,最后一位必须是NULL
        // char *envp[] = {NULL};              // 使用默认的环境变量,最后一位必须是NULL
        // char *envp[] = NULL;                // 或者直接指定为NULL
        int result = execve(path, argv, NULL);
        if (result == -1)
        {
            perror("execve执行失败\n");
            return -1;
        }
        // printf("子进程(%d)结束执行\n",getpid());
    }
    else if (pid > 0) // 父(main)进程
    {
        printf("父进程(%d)开始执行\n", getpid());
        // 等待子进程结束
        int result;
        waitpid(pid, &result, 0);
        printf("父进程wait之后,得到的状态值:%d\n", result);
        // printf("父进程(%d)结束执行\n",getpid());
    }
    printf("父进程即将结束\n");
    return 0;
}